package com.shanzmoo.base.util;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import lombok.extern.slf4j.Slf4j;

import java.time.LocalDateTime;

/**
 * 订单编号工具类
 * @author Gzhao
 * @date 2020/12/6
 */
@Slf4j
public class BillNoUtils {
    private BillNoUtils(){}

    /**
     * 生成生产单号， 共 2+14+3 = 21 位
     * @return
     */
    public static String generateProduceNo() {
        StringBuilder stb = new StringBuilder("PR");
        // 年月日时分秒
        stb.append(DateUtil.format(LocalDateTime.now(), "yyyyMMddHHmmss"));
        // 随机数
        stb.append(RandomUtil.randomInt(100, 999));
        return stb.toString();
    }

    /**
     * 生成支付单号， 共 3+17+4 = 24 位
     * @return
     */
    public static String generatePayNo() {
        StringBuilder stb = new StringBuilder("PAY");
        // 年月日时分秒
        stb.append(DateUtil.format(LocalDateTime.now(), "yyyyMMddHHmmssSSS"));
        // 4位随机数
        stb.append(RandomUtil.randomInt(1000, 9999));
        return stb.toString();
    }

    /**
     * 生成商城订单号，共 2 + 15 + 4 = 21 位
     * @return
     */
    public static String generateMallOrderNo() {
        StringBuilder stb = new StringBuilder("MA");
        // 年月日时分秒
        stb.append(DateUtil.format(LocalDateTime.now(), "yyyyMMddHHmmssS"));
        // 4位随机数
        stb.append(RandomUtil.randomInt(1000, 9999));
        return stb.toString();
    }

    /**
     * 生成门店订单号
     * @return
     */
    public static String generateOutletOrderNo(Character outletMark) {
        StringBuilder stb = new StringBuilder(String.valueOf(outletMark));
        // 年月日时分：2012091212，10位
        stb.append(DateUtil.format(LocalDateTime.now(), "yyMMddHHmm"));
        // 2位随机数
        stb.append(RandomUtil.randomInt(10, 99));
        return stb.toString();
    }

    /**
     * 生成发货单号 2 + 12 + 4 = 18 位
     * @return
     */
    public static String generateDeliveryNo() {
        StringBuilder stb = new StringBuilder("LG");
        // 年月日时分秒
        stb.append(DateUtil.format(LocalDateTime.now(), "yyyyMMddHHmm"));
        // 随机数
        stb.append(RandomUtil.randomInt(1000, 9999));
        return stb.toString();
    }

}
